﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using iTextSharp.text.pdf;
using iTextSharp.text;
using System.IO;
using negocios;
using objetos;
using publico;
using System.Web.UI;
using System.Data;

namespace relatorios
{

    public class REL_TB_ORCAMENTO : REL_PDFPAGE
    {

        BLL_TB_ORCAMENTO b_tb_orcamento = new BLL_TB_ORCAMENTO();
        OBJ_TB_ORCAMENTO o_tb_orcamento = new OBJ_TB_ORCAMENTO();

        OBJ_TB_EMPRESA o_tb_empresa = new OBJ_TB_EMPRESA();
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();

        OBJ_TB_CADASTRO o_tb_cadastro = new OBJ_TB_CADASTRO();
        BLL_TB_CADASTRO b_tb_cadastro = new BLL_TB_CADASTRO();



        OBJ_TB_TIPO_SITUACAO_ORCAMENTO o_tb_tipo_situacao_orcamento = new OBJ_TB_TIPO_SITUACAO_ORCAMENTO();
        BLL_TB_TIPO_SITUACAO_ORCAMENTO b_tb_tipo_situacao_orcamento = new BLL_TB_TIPO_SITUACAO_ORCAMENTO();

        OBJ_TB_FORMA_PAGAMENTO o_tb_forma_pagamento = new OBJ_TB_FORMA_PAGAMENTO();
        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();

        OBJ_TB_CONDICAO_PAGAMENTO o_tb_condicao_pagamento = new OBJ_TB_CONDICAO_PAGAMENTO();
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();

        OBJ_TB_ENDERECO_EMPRESA o_tb_endereco_empresa = new OBJ_TB_ENDERECO_EMPRESA();
        BLL_TB_ENDERECO_EMPRESA b_tb_endereco_empresa = new BLL_TB_ENDERECO_EMPRESA();

        OBJ_TB_ENDERECO_CADASTRO o_tb_endereco_cadastro = new OBJ_TB_ENDERECO_CADASTRO();
        BLL_TB_ENDERECO_CADASTRO b_tb_endereco_cadastro = new BLL_TB_ENDERECO_CADASTRO();

        OBJ_TB_CADASTRO_EMAIL o_tb_cadastro_email = new OBJ_TB_CADASTRO_EMAIL();
        BLL_TB_CADASTRO_EMAIL b_tb_cadastro_email = new BLL_TB_CADASTRO_EMAIL();

        BLL_TB_ORCAMENTO_ITEM b_tb_orcamento_item = new BLL_TB_ORCAMENTO_ITEM();
        OBJ_TB_ORCAMENTO_ITEM o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();
        
        OBJ_TB_UNIDADE_MEDIDA o_tb_unidade_medida = new OBJ_TB_UNIDADE_MEDIDA();
        BLL_TB_UNIDADE_MEDIDA b_tb_unidade_medida = new BLL_TB_UNIDADE_MEDIDA();

        BLL_TB_RELATORIO b_tb_relatorio = new BLL_TB_RELATORIO();
        OBJ_TB_RELATORIO o_tb_relatorio = new OBJ_TB_RELATORIO();

        OBJ_TB_UF o_tb_uf_empresa = new OBJ_TB_UF();
        BLL_TB_UF b_tb_uf_empresa = new BLL_TB_UF();

        OBJ_TB_CIDADE o_tb_cidade_empresa = new OBJ_TB_CIDADE();
        BLL_TB_CIDADE b_tb_cidade_empresa = new BLL_TB_CIDADE();



        OBJ_TB_UF o_tb_uf_cadastro = new OBJ_TB_UF();
        BLL_TB_UF b_tb_uf_cadastro = new BLL_TB_UF();

        OBJ_TB_CIDADE o_tb_cidade_cadastro = new OBJ_TB_CIDADE();
        BLL_TB_CIDADE b_tb_cidade_cadastro = new BLL_TB_CIDADE();


        List<OBJ_TB_VEICULO_CADASTRO> lista_tb_veiculo_cadastro = new List<OBJ_TB_VEICULO_CADASTRO>();
        BLL_TB_VEICULO_CADASTRO b_tb_veiculo_cadastro = new BLL_TB_VEICULO_CADASTRO();

        OBJ_TB_VEICULO o_tb_veiculo = new OBJ_TB_VEICULO();
        BLL_TB_VEICULO b_tb_veiculo = new BLL_TB_VEICULO();

        OBJ_TB_VEICULO_MARCA o_tb_veiculo_marca = new OBJ_TB_VEICULO_MARCA();
        BLL_TB_VEICULO_MARCA b_tb_veiculo_marca = new BLL_TB_VEICULO_MARCA();

        OBJ_TB_VEICULO_MODELO o_tb_veiculo_modelo = new OBJ_TB_VEICULO_MODELO();
        BLL_TB_VEICULO_MODELO b_tb_veiculo_modelo = new BLL_TB_VEICULO_MODELO();

        OBJ_TB_VEICULO_COMBUSTIVEL o_tb_veiculo_combustivel = new OBJ_TB_VEICULO_COMBUSTIVEL();
        BLL_TB_VEICULO_COMBUSTIVEL b_tb_veiculo_combustivel = new BLL_TB_VEICULO_COMBUSTIVEL();

        OBJ_TB_VEICULO_TRACAO o_tb_veiculo_tracao = new OBJ_TB_VEICULO_TRACAO();
        BLL_TB_VEICULO_TRACAO b_tb_veiculo_tracao = new BLL_TB_VEICULO_TRACAO();

        OBJ_TB_ORCAMENTO_VEICULO o_tb_orcamento_veiculo = new OBJ_TB_ORCAMENTO_VEICULO();
        BLL_TB_ORCAMENTO_VEICULO b_tb_orcamento_veiculo = new BLL_TB_ORCAMENTO_VEICULO();

        private const string arquivo = "orcamento.pdf";
        private const string diretorio = "~/relatorio/orcamento";

        public void GerarOrcamento(int id_orcamento)
        {
            bool erro = false;
            string path = HttpContext.Current.Server.MapPath(diretorio);
            string file = HttpContext.Current.Server.MapPath(diretorio + "/" + arquivo);

            
            try
            {

                foreach (OBJ_TB_RELATORIO o_tb_relatorio in b_tb_relatorio.SelecionarLista(string.Format("id_relatorio_tipo = {0}", (int)PUB_ENUM.TIPO_RELATORIO.PDF), ""))
                {
                    margem_direita = (float)o_tb_relatorio.margem_direita;
                    margem_esquerda = (float)o_tb_relatorio.margem_esquerda;
                    margem_inferior = (float)o_tb_relatorio.margem_inferior;
                    margem_superior = (float)o_tb_relatorio.margem_superior;
                    tamanho_titulo = o_tb_relatorio.tamanho_titulo;
                    tamanho_texto = o_tb_relatorio.tamanho_texto;
                    tamanho_rodape = o_tb_relatorio.tamanho_rodape;
                    tamanho_campo = o_tb_relatorio.tamanho_campo;

                }

                // VERIFICA SE EXISTE DIRETORIO SENAO CRIA UM DIRETORIO

                if (!PUB_FUNCOES.ExisteDiretorio(path))
                {
                    PUB_FUNCOES.CriarDiretorio(path);
                }

                // VERIFICA SE EXISTE UM ARQUIVO SE EXISTE DELETA
                if (PUB_FUNCOES.ExisteArquivo(file))
                {
                    if (!PUB_FUNCOES.ArquivoEstaApenasLeitura(file))
                    {
                        PUB_FUNCOES.ExcluirArquivo(file);
                    }
                    else
                    {
                        erro = true;
                    }
                }

                if (!erro)
                {

                    //create an instance of a PDF document. You may need to play with the margins to ensure the "look" is right
                    Document doc = new Document(PageSize.A4, margem_esquerda, margem_direita, margem_superior, margem_inferior);


                    PdfWriter pWriter = PdfWriter.GetInstance(doc, PUB_FUNCOES.AbrirArquivo(file, FileMode.Create));




                    // CONSULTA
                    o_tb_orcamento = b_tb_orcamento.SelecionarObjetoPorId(id_orcamento);
                    o_tb_empresa = b_tb_empresa.SelecionarObjetoPorId(o_tb_orcamento.id_empresa);                    
                    o_tb_endereco_empresa = b_tb_endereco_empresa.SelecionarObjetoPorIdEmpresa(o_tb_orcamento.id_empresa);                                       
                    o_tb_cidade_empresa = b_tb_cidade_empresa.SelecionarObjetoPorId(o_tb_endereco_empresa.id_cidade);
                    o_tb_uf_empresa = b_tb_uf_empresa.SelecionarObjetoPorId(o_tb_endereco_empresa.id_uf);

                    o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(o_tb_orcamento.id_cadastro);
                    o_tb_endereco_cadastro = b_tb_endereco_cadastro.SelecionarObjetoPorIdCadastro(o_tb_orcamento.id_cadastro);
                    o_tb_cidade_cadastro = b_tb_cidade_cadastro.SelecionarObjetoPorId(o_tb_orcamento.id_cadastro);
                    o_tb_uf_cadastro = b_tb_uf_cadastro.SelecionarObjetoPorId(o_tb_endereco_cadastro.id_uf);

                    o_tb_forma_pagamento = b_tb_forma_pagamento.SelecionarObjetoPorId(o_tb_orcamento.id_forma_pagamento);
                    o_tb_condicao_pagamento = b_tb_condicao_pagamento.SelecionarObjetoPorId(o_tb_orcamento.id_condicao_pagamento);
                    o_tb_tipo_situacao_orcamento = b_tb_tipo_situacao_orcamento.SelecionarObjetoPorId(o_tb_orcamento.id_situacao_orcamento);

                    

                    string email_cobranca = string.Empty;
                    string email_nfe = string.Empty;
                    string email_geral = string.Empty;
                    string email_orcamento = string.Empty;

                    foreach (OBJ_TB_CADASTRO_EMAIL o_tb_cadastro_email in b_tb_cadastro_email.SelecionarLista(string.Format("tb_cadastro_email.id_cadastro={0}", o_tb_orcamento.id_cadastro), ""))
                    {
                        if(Equals(o_tb_cadastro_email.id_tipo_email,(int)PUB_ENUM.TIPO_CADASTRO_EMAIL.COBRANCA))
                        {
                            email_cobranca = o_tb_cadastro_email.email.ToString();                        
                        }

                        if (Equals(o_tb_cadastro_email.id_tipo_email, (int)PUB_ENUM.TIPO_CADASTRO_EMAIL.GERAL))
                        {
                            email_geral= o_tb_cadastro_email.email.ToString();
                        }

                        if (Equals(o_tb_cadastro_email.id_tipo_email, (int)PUB_ENUM.TIPO_CADASTRO_EMAIL.NFE))
                        {
                            email_nfe = o_tb_cadastro_email.email.ToString();
                        }
                        
                    }
                    // HEADER

                    PdfPTable tbHeader = new PdfPTable(3);
                    tbHeader.WidthPercentage = (100.0f);
                    float[] colHeaderWidths = { 80, 20, 20, };
                    tbHeader.SetWidths(colHeaderWidths);
                    PdfPCell cellVazio = new PdfPCell(new Phrase("", FonteArial(tamanho_texto)));
                    cellVazio.Border = 0;

                    PdfPCell chNumeroOrcamento = new PdfPCell(new Phrase("Núm. Orçamento", FonteArial(tamanho_campo)));
                    chNumeroOrcamento.Border = 0;
                    PdfPCell chDataEmissao = new PdfPCell(new Phrase("Data Emissão", FonteArial(tamanho_campo)));
                    chDataEmissao.Border = 0;
                    PdfPCell chDataAprovacao = new PdfPCell(new Phrase("Data Aprovação", FonteArial(tamanho_campo)));
                    chDataAprovacao.Border = 0;
                    PdfPCell chSituacaoOrcamento = new PdfPCell(new Phrase("Situação Orçamentoo", FonteArial(tamanho_campo)));
                    chSituacaoOrcamento.Border = 0;



                    PdfPCell cellNumeroOrcamento = Celula(o_tb_orcamento.id.ToString(), tamanho_campo);
                    cellNumeroOrcamento.Border = 0;
                    PdfPCell cellDataEmissao = Celula(((DateTime)o_tb_orcamento.dt_emissao).ToShortDateString(), tamanho_campo);
                    cellDataEmissao.Border = 0;
                    PdfPCell cellDataAprovacao = Celula(o_tb_orcamento.dt_aprovacao.ToString(), tamanho_campo);
                    cellDataAprovacao.Border = 0;

                    

                    PdfPCell cellNomeEmpresa = Celula(o_tb_empresa.nome.ToString(), tamanho_texto);
                    cellNomeEmpresa.Border = 0;
                    PdfPCell cellCNPJEmpresa = Celula(PUB_FUNCOES.FormataCNPJ(o_tb_empresa.cnpj.ToString()), tamanho_texto);
                    cellCNPJEmpresa.Border = 0;
                    PdfPCell cellEnderecoEmpresa = Celula(o_tb_endereco_empresa.endereco.ToString() + "," + o_tb_endereco_empresa.numero.ToString(), tamanho_texto);
                    cellEnderecoEmpresa.Border = 0;
                    PdfPCell cellBairroCepEmpresa = Celula(o_tb_endereco_empresa.bairro.ToString() + " - " + o_tb_endereco_empresa.cep.ToString(), tamanho_texto);
                    cellBairroCepEmpresa.Border = 0;
                    PdfPCell cellCidadeEstadoEmpresa = Celula(o_tb_cidade_empresa.cidade.ToString() + " - " + o_tb_uf_empresa.desc_uf.ToString() , tamanho_texto);
                    cellCidadeEstadoEmpresa.Border = 0;
                    PdfPCell cellTelefoneEmpresa = Celula(o_tb_endereco_empresa.telefone.ToString(), tamanho_texto);
                    cellTelefoneEmpresa.Border = 0;
                    PdfPCell cellEmailEmpresa = Celula(o_tb_empresa.email.ToString(), tamanho_texto);
                    cellEmailEmpresa.Border = 0;
                    PdfPCell cellSituacaoOrcamento = Celula(o_tb_tipo_situacao_orcamento.desc_tipo_sit_orcamento.ToString(), tamanho_texto);
                    cellSituacaoOrcamento.Border = 0;

 
                    tbHeader.AddCell(cellNomeEmpresa);
                    tbHeader.AddCell(chNumeroOrcamento);
                    tbHeader.AddCell(cellNumeroOrcamento);

                    tbHeader.AddCell(cellCNPJEmpresa);
                    tbHeader.AddCell(chDataEmissao);
                    tbHeader.AddCell(cellDataEmissao);

                    tbHeader.AddCell(cellEnderecoEmpresa);
                    tbHeader.AddCell(chDataAprovacao);
                    tbHeader.AddCell(cellDataAprovacao);

                    tbHeader.AddCell(cellBairroCepEmpresa);
                    tbHeader.AddCell(chSituacaoOrcamento);
                    tbHeader.AddCell(cellSituacaoOrcamento);

                    tbHeader.AddCell(cellCidadeEstadoEmpresa);
                    tbHeader.AddCell(cellVazio);
                    tbHeader.AddCell(cellVazio);

                    tbHeader.AddCell(cellTelefoneEmpresa);
                    tbHeader.AddCell(cellVazio);
                    tbHeader.AddCell(cellVazio);



                    // CLIENTE FORNECEDOR ---------------------------------------------------------------------------------

                    PdfPTable tbClienteFornecedor = new PdfPTable(5);
                    tbClienteFornecedor.WidthPercentage = (100.0f);
                    float[] colClienteFornecedorWidths = { 50, 50, 30, 30, 30 };
                    tbClienteFornecedor.SetWidths(colClienteFornecedorWidths);


                    PdfPCell chCliForNome = new PdfPCell(new Phrase("Razão Social", FonteArial(tamanho_campo)));
                    chCliForNome.Border = 0;
                    PdfPCell chCliForCNPJ = new PdfPCell(new Phrase("CNPJ", FonteArial(tamanho_campo)));
                    chCliForCNPJ.Border = 0;

                    PdfPCell chCliForEndereco = new PdfPCell(new Phrase("Endereço", FonteArial(tamanho_campo)));
                    chCliForEndereco.Border = 0;
                    PdfPCell chCliForNumero = new PdfPCell(new Phrase("Número", FonteArial(tamanho_campo)));
                    chCliForNumero.Border = 0;
                    PdfPCell chCliForCep = new PdfPCell(new Phrase("CEP", FonteArial(tamanho_campo)));
                    chCliForCep.Border = 0;
                    PdfPCell chCliForBairro = new PdfPCell(new Phrase("Bairro", FonteArial(tamanho_campo)));
                    chCliForBairro.Border = 0;
                    PdfPCell chCliForCidade = new PdfPCell(new Phrase("Cidade", FonteArial(tamanho_campo)));
                    chCliForCidade.Border = 0;
                    PdfPCell chCliForEstado = new PdfPCell(new Phrase("Estado", FonteArial(tamanho_campo)));
                    chCliForEstado.Border = 0;
                    PdfPCell chCliForTelefone = new PdfPCell(new Phrase("Telefone", FonteArial(tamanho_campo)));
                    chCliForTelefone.Border = 0;
                    PdfPCell chCliForEmail = new PdfPCell(new Phrase("Email", FonteArial(tamanho_campo)));
                    chCliForEmail.Border = 0;


                    // TEXTO CLIENTE FORNECEDOR

                    PdfPCell cellCliForNome = Celula(o_tb_cadastro.nome.ToString(), tamanho_texto);
                    cellCliForNome.Border = 0;
                    PdfPCell cellCliForCNPJ = Celula(PUB_FUNCOES.FormataCNPJ(o_tb_cadastro.cnpj_cpf.ToString()), tamanho_texto);
                    cellCliForCNPJ.Border = 0;
                    PdfPCell cellCliForEndereco = Celula(o_tb_endereco_cadastro.endereco.ToString(), tamanho_texto);
                    cellCliForEndereco.Border = 0;
                    PdfPCell cellCliForNumero = Celula(o_tb_endereco_cadastro.numero.ToString(), tamanho_texto);
                    cellCliForNumero.Border = 0;
                    PdfPCell cellCliForCep = Celula(o_tb_endereco_cadastro.cep.ToString(), tamanho_texto);
                    cellCliForCep.Border = 0;
                    PdfPCell cellCliForBairro = Celula(o_tb_endereco_cadastro.bairro.ToString(), tamanho_texto);
                    cellCliForBairro.Border = 0;
                    PdfPCell cellCliForCidade = Celula(o_tb_cidade_cadastro.cidade.ToString(), tamanho_texto);
                    cellCliForCidade.Border = 0;
                    PdfPCell cellCliForEstado = Celula(o_tb_uf_cadastro.uf.ToString(), tamanho_texto);
                    cellCliForEstado.Border = 0;
                    PdfPCell cellCliForTelefone = Celula(o_tb_endereco_cadastro.telefone.ToString(), tamanho_texto);
                    cellCliForTelefone.Border = 0;
                    PdfPCell cellCliForEmail = Celula(email_geral, tamanho_texto);
                    cellCliForEmail.Border = 0;

                  

                    // titulo   
                    chCliForNome.Colspan = 2;
                    tbClienteFornecedor.AddCell(chCliForNome);
                    tbClienteFornecedor.AddCell(chCliForCNPJ);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // TEXTO

                    cellCliForNome.Colspan = 2;
                    tbClienteFornecedor.AddCell(cellCliForNome);
                    tbClienteFornecedor.AddCell(cellCliForCNPJ);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // HEADER LINHA 2

                    tbClienteFornecedor.AddCell(chCliForEndereco);
                    tbClienteFornecedor.AddCell(chCliForNumero);
                    tbClienteFornecedor.AddCell(chCliForCep);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // TEXTO

                    tbClienteFornecedor.AddCell(cellCliForEndereco);
                    tbClienteFornecedor.AddCell(cellCliForNumero);
                    tbClienteFornecedor.AddCell(cellCliForCep);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // HEADER LINHA 3



                    tbClienteFornecedor.AddCell(chCliForBairro);
                    tbClienteFornecedor.AddCell(chCliForCidade);
                    tbClienteFornecedor.AddCell(chCliForEstado);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // TEXTO

                    tbClienteFornecedor.AddCell(cellCliForBairro);
                    tbClienteFornecedor.AddCell(cellCliForCidade);
                    tbClienteFornecedor.AddCell(cellCliForEstado);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // HEADER LINHA 4

                    tbClienteFornecedor.AddCell(chCliForTelefone);
                    tbClienteFornecedor.AddCell(chCliForEmail);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);

                    // TEXTO          

                    tbClienteFornecedor.AddCell(cellCliForTelefone);
                    tbClienteFornecedor.AddCell(cellCliForEmail);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);
                    tbClienteFornecedor.AddCell(cellVazio);



                    //////////////////////// PRODUTO /////////////////////////////////

                    List<OBJ_TB_ORCAMENTO_ITEM> lista_produto = new List<OBJ_TB_ORCAMENTO_ITEM>();
                    lista_produto = b_tb_orcamento_item.SelecionarLista(string.Format("tb_orcamento_item.id_orcamento = {0} AND tb_orcamento_item.id_tipo_item not in ({1})", o_tb_orcamento.id.ToString(), (int)PUB_ENUM.TIPO_ITEM.Servicos), "");
                    PdfPTable tbProduto = null;
                    if (lista_produto.Count > 0)
                    {
                        tbProduto = new PdfPTable(7);
                        tbProduto.WidthPercentage = (100.0f);
                        float[] colProdWidths = { 5, 50, 5, 5, 10, 10, 10 };
                        tbProduto.SetWidths(colProdWidths);



                        PdfPCell chTituloProdutos = new PdfPCell(new Phrase("Produtos", FonteArial(tamanho_campo)));
                        chTituloProdutos.Colspan = 7;
                        chTituloProdutos.Border = 0;

                        PdfPCell chProdCodigo = Celula("Cód.", tamanho_campo);
                        PdfPCell chProdProduto = Celula("Produto", tamanho_campo);
                        PdfPCell chProdQtd = Celula("Qtd", tamanho_campo);
                        PdfPCell chProdUnidadeMedida = Celula("Unid.", tamanho_campo);
                        PdfPCell chProdUnitario = Celula("Vlr Unitário", tamanho_campo);                        
                        PdfPCell chProdDesconto = Celula("Desconto", tamanho_campo);
                        PdfPCell chProdSubTotal = Celula("SubTotal", tamanho_campo);
                        //                  PdfPCell chProdVlrOutro = Celula("Vlr Outro", tamanho_campo);

                        // HEADER
                        tbProduto.AddCell(chTituloProdutos);
                        tbProduto.AddCell(chProdCodigo);
                        tbProduto.AddCell(chProdProduto);
                        tbProduto.AddCell(chProdQtd);
                        tbProduto.AddCell(chProdUnidadeMedida);
                        tbProduto.AddCell(chProdUnitario);
                        tbProduto.AddCell(chProdDesconto);                        
                        //                      tbProduto.AddCell(chProdVlrOutro);
                        tbProduto.AddCell(chProdSubTotal);



                        // ITEM PRODUTO
                        foreach (OBJ_TB_ORCAMENTO_ITEM item in lista_produto)
                        {

                            PdfPCell cellItemCodigo = Celula(item.id_produto_servico.ToString(), tamanho_texto);
                            PdfPCell cellItemProduto = Celula(item.descricao.ToString(), tamanho_texto);
                            PdfPCell cellItemQtd = Celula(item.qtd.ToString(), tamanho_texto);
                            PdfPCell cellItemUnidMed = Celula(b_tb_unidade_medida.SelecionarObjetoPorId(Convert.ToInt32(item.id_unidade_medida)).sigla.ToString(), tamanho_texto);
                            PdfPCell cellItemUnitario = Celula(PUB_FUNCOES.FormataNumerico(PUB_FUNCOES.TrataDecimal(item.valor_unitario.ToString())), tamanho_texto);
                            PdfPCell cellItemDesconto = Celula(PUB_FUNCOES.FormataNumerico(PUB_FUNCOES.TrataDecimal(item.valor_desconto.ToString())), tamanho_texto);
                            //   PdfPCell cellItemVlrOutro = Celula(PUB_FUNCOES.FormataNumerico(PUB_FUNCOES.TrataDecimal(item.valor_outro.ToString())), tamanho_texto);
                            PdfPCell cellItemSubTotal = Celula(PUB_FUNCOES.FormataNumerico(PUB_FUNCOES.TrataDecimal(item.valor_total.ToString())), tamanho_texto);

                            tbProduto.AddCell(cellItemCodigo);
                            tbProduto.AddCell(cellItemProduto);
                            tbProduto.AddCell(cellItemQtd);
                            tbProduto.AddCell(cellItemUnidMed);
                            tbProduto.AddCell(cellItemUnitario);
                            tbProduto.AddCell(cellItemDesconto);                            
                            //  tbProduto.AddCell(cellItemVlrOutro);
                            tbProduto.AddCell(cellItemSubTotal);

                        }


                    }



                    //////////////////////////// SERVICO ////////////////////////////////

                    List<OBJ_TB_ORCAMENTO_ITEM> lista_servico = new List<OBJ_TB_ORCAMENTO_ITEM>();



                    lista_servico = b_tb_orcamento_item.SelecionarLista(string.Format("tb_orcamento_item.id_orcamento = {0} AND tb_orcamento_item.id_tipo_item in ({1})", o_tb_orcamento.id.ToString(), (int)PUB_ENUM.TIPO_ITEM.Servicos), "");
                    PdfPTable tbServico = null;
                    if (lista_servico.Count > 0)
                    {

                        // INICIO TABELA
                        tbServico = new PdfPTable(7);
                        tbServico.WidthPercentage = (100.0f);
                        float[] colServWidths = { 5, 50, 5, 5, 10, 10, 10 };

                        tbServico.SetWidths(colServWidths);
                        PdfPCell chTituloServicos = new PdfPCell(new Phrase("Serviços", FonteArial(tamanho_campo)));
                        chTituloServicos.Colspan = 14;
                        chTituloServicos.Border = 0;
                        PdfPCell chServCodigo = Celula("Cód.", tamanho_campo);
                        PdfPCell chServProduto = Celula("Descrição", tamanho_campo);
                        PdfPCell chServQtd = Celula("Qtd", tamanho_campo);
                        PdfPCell chServUnidade = Celula("Unid.", tamanho_campo);                        
                        PdfPCell chServUnitario = Celula("Unitário.", tamanho_campo);
                        PdfPCell chServDesconto = Celula("Desconto", tamanho_campo);
                        PdfPCell chServSubTotal = Celula("SubTotal", tamanho_campo);

                        tbServico.AddCell(chTituloServicos);
                        tbServico.AddCell(chServCodigo);
                        tbServico.AddCell(chServProduto);
                        tbServico.AddCell(chServQtd);
                        tbServico.AddCell(chServUnidade);                        
                        tbServico.AddCell(chServDesconto);
                        tbServico.AddCell(chServUnitario);
                        tbServico.AddCell(chServSubTotal);

                        // ITEM SERVICO

                        foreach (OBJ_TB_ORCAMENTO_ITEM item in lista_servico)
                        {

                            PdfPCell cellItemCodigo = Celula(item.id_produto_servico.ToString(), tamanho_texto);
                            PdfPCell cellItemProduto = Celula(item.descricao.ToString(), tamanho_texto);
                            PdfPCell cellItemUnidade = Celula(b_tb_unidade_medida.SelecionarObjetoPorId(Convert.ToInt32(item.id_unidade_medida)).desc_unidade_medida.ToString(), tamanho_texto);
                            PdfPCell cellItemQtd = Celula(item.qtd.ToString(), tamanho_texto);
                            PdfPCell cellItemUnitario = Celula(PUB_FUNCOES.FormataNumerico(item.valor_unitario.ToString()), tamanho_texto);
                            PdfPCell cellItemDesconto = Celula(PUB_FUNCOES.FormataNumerico(item.valor_desconto.ToString()), tamanho_texto);
                            PdfPCell cellItemSubTotal = Celula(PUB_FUNCOES.FormataNumerico(item.valor_total.ToString()), tamanho_texto);

                            tbServico.AddCell(cellItemCodigo);
                            tbServico.AddCell(cellItemProduto);
                            tbServico.AddCell(cellItemUnidade);
                            tbServico.AddCell(cellItemQtd);
                            tbServico.AddCell(cellItemUnitario);
                            tbServico.AddCell(cellItemDesconto);
                            tbServico.AddCell(cellItemSubTotal);
                        }


                    }



                    /// -------------- VALORES

                    PdfPCell chTituloValores = Celula("Valores", tamanho_campo);
                    chTituloValores.Colspan = 3;
                    chTituloValores.Border = 0;
                    chTituloValores.HorizontalAlignment = 2;
 
   
                    // DADOS DO CALCULO IMPOSTO / TOTAL NOTA FISCAL 

                    PdfPTable tbTotalizador = new PdfPTable(2);
                    tbTotalizador.WidthPercentage = (100.0f);
                    float[] colTotalizadorWidths = { 90,10 };
                    tbTotalizador.SetWidths(colTotalizadorWidths);

                   
                                 
                    PdfPCell chValorTotal = Celula("Valor Total", tamanho_campo);

                 
                                      
                    PdfPCell cellValorTotal = Celula(PUB_FUNCOES.FormataMoeda(o_tb_orcamento.valor_total_orcamento.ToString()), tamanho_texto);


                    // HEADER VALORES
                    tbTotalizador.AddCell(chTituloValores);

                    // LINHA 1                  
                    tbTotalizador.AddCell(cellVazio);                    
                    tbTotalizador.AddCell(chValorTotal);
               
                    tbTotalizador.AddCell(cellVazio);                    
                    tbTotalizador.AddCell(cellValorTotal);


  //                /////////////// VEICULO ///////////////////////
                    PdfPTable tbVeiculo = new PdfPTable(2);
                    tbVeiculo.WidthPercentage = (100.0f);
                    float[] colVeiculoWidths = { 50, 50 };
                    tbVeiculo.SetWidths(colVeiculoWidths);

                    PdfPCell chTituloVeiculo = Celula("Veículo", tamanho_campo);
                    chTituloVeiculo.Colspan = 2;
                    chTituloVeiculo.Border = 0;


                    PdfPCell chVeiculoPlaca = Celula("Placa", tamanho_texto);
                    PdfPCell chVeiculoKm = Celula("KM", tamanho_texto);


                    tbVeiculo.AddCell(chTituloVeiculo);

                    // HEADER
                    tbVeiculo.AddCell(chVeiculoPlaca);
                    tbVeiculo.AddCell(chVeiculoKm);


                    PdfPCell cellVeiculoPlaca = Celula(o_tb_orcamento.veiculo_placa.ToString(), tamanho_texto);
                    PdfPCell cellVeiculoKm = Celula(o_tb_orcamento.veiculo_km.ToString(), tamanho_texto);

                    /////////////// OBSERVACOES ///////////////////////                  

                    // TABELA OBSERVACAO
                    PdfPTable tbObservacao = new PdfPTable(1);
                    tbObservacao.WidthPercentage = (100.0f);
                    float[] colObservacaoWidths = { 100 };
                    tbObservacao.SetWidths(colObservacaoWidths);

                    // TITULO OBSERVACAO
                    PdfPCell chTituloObservacao = Celula("Observação", tamanho_campo);
                    chTituloObservacao.Colspan = 1;
                    chTituloObservacao.Border = 0;
                    

                    PdfPCell cellObservacao = Celula(o_tb_orcamento.observacao.ToString(), tamanho_texto);
                    cellObservacao.Border = 0;

                    tbObservacao.AddCell(chTituloObservacao);
                    tbObservacao.AddCell(cellObservacao);

                    /////////////// FORMA PAGAMENTO ///////////////////////                  

                    PdfPTable tbPagamento = new PdfPTable(2);
                    tbPagamento.WidthPercentage = (100.0f);
                    float[] colPagamentoWidths = { 50, 50 };
                    tbPagamento.SetWidths(colPagamentoWidths);

                    // TITULO PAGAMENTO
                    PdfPCell chTituloPagamentos = Celula("Pagamentos", tamanho_campo);
                    chTituloPagamentos.Colspan = 2;
                    chTituloPagamentos.Border = 0;

                    // HEADER PAGAMENTO
                    PdfPCell chFormaPagamento = Celula("Forma Pagamento", tamanho_campo);
                    PdfPCell chCondicaoPagamento = Celula("Condição Pagamento", tamanho_campo);

                    // ITEM PAGAMENTO
                    PdfPCell cellFormaPagamento = Celula(o_tb_forma_pagamento.desc_forma_pagamento.ToString(), tamanho_texto);
                    PdfPCell cellCondicaoPagamento = Celula(o_tb_condicao_pagamento.desc_condicao_pagamento.ToString(), tamanho_texto);

                    tbPagamento.AddCell(chTituloPagamentos);

                    tbPagamento.AddCell(chFormaPagamento);
                    tbPagamento.AddCell(cellFormaPagamento);
                    tbPagamento.AddCell(chCondicaoPagamento);
                    tbPagamento.AddCell(cellCondicaoPagamento);


                    doc.Open();
                    // logo
                    OnStartPage(pWriter, doc);

                    string compra_venda = string.Empty;
                    string cliente_fornecedor = string.Empty;

                    if (o_tb_orcamento.id_operacao == 0)
                    {
                        compra_venda = "Compra";
                        cliente_fornecedor = "Fornecedor";
                    }
                    else
                    {
                        compra_venda = "Venda";
                        cliente_fornecedor = "Cliente";
                       
                    }
                    doc.Add(Titulo(string.Format("Orçamento  {0}", compra_venda), 15,1));
                    doc.Add(QuebraLinha());
                    doc.Add(tbHeader);
                    doc.Add(QuebraLinha());
                    doc.Add(Titulo(string.Format("{0}", cliente_fornecedor), 15, 1));   
                    doc.Add(QuebraLinha());
                    doc.Add(tbClienteFornecedor);
                    doc.Add(QuebraLinha());
                    if (lista_produto.Count > 0)
                    {
                        doc.Add(tbProduto);
                        doc.Add(QuebraLinha());
                    }
                    if (lista_servico.Count > 0)
                    {
                        doc.Add(tbServico);
                        doc.Add(QuebraLinha());
                    }

                    doc.Add(tbTotalizador);
                    doc.Add(QuebraLinha());

                    if (o_tb_orcamento.veiculo_placa != string.Empty || o_tb_orcamento.veiculo_km != string.Empty)
                    { 
                        doc.Add(tbVeiculo);
                        doc.Add(QuebraLinha());
                    }
                    
                    doc.Add(tbPagamento);
                    doc.Add(QuebraLinha());
                    doc.Add(tbObservacao);

                    OnEndPage(pWriter, doc);

                    // contador
                    doc.Close();


                    Download(file);

                }



            }
            catch (Exception)
            {                               
                throw;
            }

        }

    }

}